In a traditional approach for achieving highly available and redundant telecommunication applications, the number of compute elements (e.g., virtual machines (VMs) or hosts) is at least N+1 and sometimes 2N, in order to allow synchronization of state from a primary to a secondary compute instance. The required memory, in totality, is 2N, since every important state must be replicated in memory at a second location. In order to accomplish this solution, code must be written and tested to push state from the primary compute instance, and install it at the secondary computer instances. CPU cycles are expended in this process, thereby reducing the maximal rate at which the system could otherwise handle transactions. Ultimately, a slower and less available system results due to the efforts to add redundancy.